a11y: Add change notification to GtkATContext
authorMatthias Clasen <mclasen@redhat.com>
Tue, 28 Jul 2020 02:51:34 +0000 (22:51 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 28 Jul 2020 12:41:24 +0000 (08:41 -0400)
Emit a ::state-change signal when state changes;
this was already a vfunc, but we want to listen
to state changes from the inspector too.

gtk/gtkatcontext.c

index aa5b424cc2f046b3de094873093759d58b371072..aefce4df4f7c9ebd9e12b88b9e4ea15701626c86 100644 (file)
@@ -49,8 +49,17 @@ enum
   N_PROPS
 };
 
+enum
+{
+  STATE_CHANGE,
+
+  LAST_SIGNAL
+};
+
 static GParamSpec *obj_props[N_PROPS];
 
+static guint obj_signals[LAST_SIGNAL];
+
 static void
 gtk_at_context_finalize (GObject *gobject)
 {
@@ -163,6 +172,17 @@ gtk_at_context_class_init (GtkATContextClass *klass)
                          G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_STATIC_STRINGS);
 
+  obj_signals[STATE_CHANGE] =
+    g_signal_new ("state-change",
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_FIRST,
+                  G_STRUCT_OFFSET (GtkATContextClass, state_change),
+                  NULL, NULL,
+                  NULL,
+                  G_TYPE_NONE, 6,
+                  G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT,
+                  G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER);
+
   g_object_class_install_properties (gobject_class, N_PROPS, obj_props);
 }
 
@@ -399,13 +419,9 @@ gtk_at_context_update (GtkATContext *self)
   GtkAccessibleRelationChange changed_relations =
     gtk_accessible_attribute_set_get_changed (self->relations);
 
-  GTK_AT_CONTEXT_GET_CLASS (self)->state_change (self,
-                                                 changed_states,
-                                                 changed_properties,
-                                                 changed_relations,
-                                                 self->states,
-                                                 self->properties,
-                                                 self->relations);
+  g_signal_emit (self, obj_signals[STATE_CHANGE], 0,
+                 changed_states, changed_properties, changed_relations,
+                 self->states, self->properties, self->relations);
 }
 
 /*< private >